package com.koi.plus.mapper.system;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.koi.model.bo.element.CascaderLongBo;
import com.koi.model.bo.system.SysMenuBo;
import com.koi.model.vo.system.SysMenuVo;
import com.koi.pojo.system.SysMenu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author ･ᴗ･
 * @description [菜单权限表-数据库连接层]
 */
@Mapper
public interface SysMenuMapper extends BaseMapper<SysMenu> {

    /**
     * @description [查询菜单]
     * @author ･ᴗ･
     */
    List<SysMenu> listSysMenu(@Param("vo") SysMenuVo vo);

    /**
     * @description [查询用户拥有的菜单权限-AOP]
     * @author ･ᴗ･
     */
    List<Long> listMenuIdData(Long userId);

    /**
     * @description [菜单级联下拉框]
     * @author ･ᴗ･
     */
    List<CascaderLongBo> cascaderList();

    /**
     * @description [根据用户ID查询当前角色所拥有的菜单列表]
     * @author ･ᴗ･
     */
    List<SysMenuBo> listMenuByUserId(Long userId);

    /**
     * @description [超级管理员-全部菜单权限]
     * @author ･ᴗ･
     */
    List<SysMenuBo> listMenuAdmin();

    /**
     * @description [根据用户拥有的角色ID查询权限菜单]
     * @author ･ᴗ･
     */
    List<SysMenu> listMenuIdsByRoleId(Long roleId);

    /**
     * @description [保存角色和菜单权限之间的关系]
     * @author ･ᴗ･
     */
    boolean saveRoleMenu(@Param("roleId") Long roleId, @Param("menuIds") List<Long> menuIds);

    /**
     * @description [删除该角色拥有的权限]
     * @author ･ᴗ･
     */
    boolean deleteMenuIdsByRoleId(Long roleId);

    /**
     * @description [根据角色编码查询菜单权限-Sa-Token权限]
     * @author ･ᴗ･
     */
    List<String> listMenuAuth(String roleCode);

}
